/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年9月27日
 * 项目： rainhy-auth
 */
package com.rainhy.auth.authloader.annotation;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.rainhy.auth.context.AuthItem;
import com.rainhy.auth.context.AuthItemGroup;

/**
 * 权限组
 * 
 * @author rain
 * @version [版本号, 2016年9月27日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class AnnAuthItemGroup implements AuthItemGroup {
    
    /** 权限组 key */
    private String key;
    
    /** 所属权限组 */
    private AuthItemGroup parent;
    
    /** 权限组名 */
    private String name;
    
    /** 所属权限组的 key */
    private String parentKey;
    
    /** 子权限 */
    private Set<AuthItem> authItemChilds = new HashSet<>();
    
    /** 子权限组 */
    private Set<AuthItemGroup> childs = new HashSet<>();
    
    public AnnAuthItemGroup(String key, String name, String parentKey) {
        this.key = key;
        this.name = name;
        this.parentKey = parentKey;
    }
    
    /** 子权限 */
    public void addAuthItemChild(AuthItem authItem) {
        authItemChilds.add(authItem);
    }
    
    /** 子权限组 */
    public void addChild(AuthItemGroup authItemGroup) {
        childs.add(authItemGroup);
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        AnnAuthItemGroup other = (AnnAuthItemGroup) obj;
        if (key == null) {
            if (other.key != null)
                return false;
        } else if (!key.equals(other.key))
            return false;
        return true;
    }
    
    /** 子权限 */
    @Override
    public List<AuthItem> getAuthItemChilds() {
        return new ArrayList<>(this.authItemChilds);
    }
    
    /** 子权限组 */
    @Override
    public List<AuthItemGroup> getChilds() {
        return new ArrayList<>(childs);
    }
    
    /** 描述 */
    @Override
    public String getDescription() {
        return null;
    }
    
    /** 权限组 key */
    @Override
    public String getKey() {
        return this.key;
    }
    
    /** 权限组名 */
    @Override
    public String getName() {
        return this.name;
    }
    
    /** 所属权限组 */
    @Override
    public AuthItemGroup getParent() {
        return parent;
    }
    
    /** 所属权限组的 key */
    public String getParentKey() {
        return parentKey;
    }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((key == null) ? 0 : key.hashCode());
        return result;
    }
    
    /** 权限组 key */
    public void setKey(String key) {
        this.key = key;
    }
    
    /** 权限组名 */
    public void setName(String name) {
        this.name = name;
    }
    
    /** 所属权限组 */
    public void setParent(AuthItemGroup parent) {
        this.parent = parent;
    }
    
    /** 所属权限组的 key */
    public void setParentKey(String parentKey) {
        this.parentKey = parentKey;
    }
    
}
